// #include <iostream>
// #include <string>
//
// using namespace std;
//
// //类的组合是什么  以另一个类对象为数据成员
// //写法 组合类的构造函数必须调用分支类的构造函数 并且采用初始化参数列表的写法
//
// class Eye
// {
// public:
//     Eye()=default;
//     Eye(string name):name(name)
//     {
//
//     }
//     void print() const
//     {
//         cout << name << endl;
//     }
// protected:
//     string name;
// };
//
// class Nose
// {
// public:
//     Nose()=default;
//     Nose(string name):name(name)
//     {
//
//     }
//     void print() const
//     {
//         cout << name << endl;
//     }
// protected:
//     string name;
// };
//
//
//
// class Head
// {
// public:
//     Head()
//     {
//         cout <<"head构造函数" << endl;
//     }
//
//
//     Head(string nose,string eye):nose(nose),eye(eye)
//     {
//
//     }
//     void print_head()
//     {
//         eye.print();
//         nose.print();
//     }
// protected:
//     //构造顺序之和对象的定义顺序有关
//     Eye eye;
//     Nose nose;
// };
//
// class A
// {
// public:
//     A(int a):a(a){}
//     int a;
// };
//
// class B
// {
// public:
//     B(int b):b(b){}
//     int b;
// };
//
// class C
// {
// public:
//     // C()
//     // {
//     //
//     // }
//
//     C(int a ,int b):a(a),b(b)
//     {
//
//     }
//     A a;
//     B b;
// };
//
// //考点---> 构造和析构问题
// class T1
// {
// public:
//     T1(int t1)
//     {
//         cout <<1 << endl;
//     }
//     ~T1()
//     {
//         cout <<1 << endl;
//     }
// };
//
// class T2
// {
// public:
//     T2(int t2)
//     {
//         cout <<2 << endl;
//     }
//     ~T2()
//     {
//         cout <<2 << endl;
//     }
// };
//
// class T3
// {
// public:
//     T3(int t3)
//     {
//         cout <<3 << endl;
//     }
//     ~T3()
//     {
//         cout <<3 << endl;
//     }
// };
//
// class Test
// {
// public:
//     Test():t3(3),t2(2),t1(1)
//     {
//         cout << 4 << endl;
//     }
//
//     ~Test()
//     {
//         cout << 4 << endl;
//     }
//     //构造和析构顺序只和这里有关系
//     T1 t1;
//     T2 t2;
//     T3 t3;
// };
//
//
//
//
// int main()
// {
//     //组合类想要构造无参对象 意味着所有的分支类必须要存在一个无参的构造函数调用形态
//     //构造组合类必定先调用分支类的构造函数
//     // Head obj;
//     //
//     // Head coolman("yanyij","abc");
//     // coolman.print_head();
//
//     Test test;
//     return 0;
// }